#include "personne.h"
#include "options.h"
#include "bdd.h"

personne::personne()
{
}

void personne::Vider()
{
    nomPersonne.clear();
    biographiePersonne.clear();
    dateNaissancePersonne.clear();
    lieuNaissancePersonne.clear();
    cheminPhotoPersonne.clear();
    photoPersonne.~QPixmap();
    sexePersonne = 0;
    codeAllocinePersonne = 0;
}

int personne::Existe(int codeAllocine)
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete = "SELECT idPersonne FROM personne WHERE codeAllocinePersonne ="
            + db.TexteVersSql(QString::number(codeAllocine));
    return db.EstDansLaBase(requete);
}

void personne::Enregistre()
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete;

    // Si la personne n'existe pas on la crée
    if (this->Existe(this->codeAllocinePersonne) == 0)
    {
        requete = "INSERT INTO personne(idPersonne,codeAllocinePersonne,sexePersonne,nomPersonne,"
                "dateNaissancePersonne,lieuNaissancePersonne,biographiePersonne,cheminPhoto) VALUES(NULL, "
                + db.TexteVersSql(QString::number(this->codeAllocinePersonne))+ ", "
                + db.TexteVersSql(QString::number(this->sexePersonne)) + ", " + db.TexteVersSql(this->nomPersonne) + ", "
                + db.TexteVersSql(this->dateNaissancePersonne)+ ", " + db.TexteVersSql(this->lieuNaissancePersonne) + ", "
                + db.TexteVersSql(this->biographiePersonne)+ ", " + db.TexteVersSql(this->cheminPhotoPersonne) + ")";
    }
    // Si il y a plusieurs personnes trouvées
    else if (this->Existe(this->codeAllocinePersonne) == -1)
    {
        QMessageBox msg(QMessageBox::Warning,"Erreur lors de l'enregistrement d'une personnalité",
                        "Plusieurs personnalités avec le même code allociné ont été trouvées dans la base !");
        msg.exec();
    }
    // Sinon on le modifie
    else
    {
        requete = "UPDATE personne SET "
                "codeAllocinePersonne = " + db.TexteVersSql(QString::number(this->codeAllocinePersonne))+ ", "
                "sexePersonne = " + db.TexteVersSql(QString::number(this->sexePersonne)) + ", "
                "nomPersonne = " + db.TexteVersSql(this->nomPersonne) + ", "
                "dateNaissancePersonne = " + db.TexteVersSql(this->dateNaissancePersonne)+ ", "
                "lieuNaissancePersonne = " + db.TexteVersSql(this->lieuNaissancePersonne) + ", "
                "biographiePersonne = " + db.TexteVersSql(this->biographiePersonne)+ ", "
                "cheminPhoto = " + db.TexteVersSql(this->cheminPhotoPersonne) +
                "WHERE idPersonne = " + db.TexteVersSql(QString::number(this->idPersonne));
    }

    db.Execute(requete);
}

void personne::Supprime()
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete = "DELETE FROM personne WHERE idPersonne="+db.TexteVersSql(QString::number(this->idPersonne));
    db.Execute(requete);
}

QList<personne> personne::ListePersonnes()
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete = "SELECT idPersonne,codeAllocinePersonne,sexePersonne,nomPersonne,"
            "dateNaissancePersonne,lieuNaissancePersonne,biographiePersonne,cheminPhoto "
            "FROM personne ORDER BY nomPersonne";
    db.Execute(requete);

    QList<personne> listePers;

    while(db.Requete().next())
    {
        personne unePers;
        unePers.setId(db.Requete().value(0).toInt());
        unePers.setCodeAllocine(db.Requete().value(1).toInt());
        unePers.setSexe(db.Requete().value(2).toInt());
        unePers.setNom(db.Requete().value(3).toString());
        unePers.setDateNaissance(db.Requete().value(4).toString());
        unePers.setLieuNaissance(db.Requete().value(5).toString());
        unePers.setBiographie(db.Requete().value(6).toString());
        unePers.setCheminPhoto(db.Requete().value(7).toString());

        listePers << unePers;
    }
    return listePers;
}

QString personne::resume()
{
    QString res;
    res.append("nom : "+nom());
    res.append("\nDate de naissance : "+dateNaissance());
    res.append("\nBiographie : "+biographie());
    return res;
}

void personne::setId(int id)
{
    this->idPersonne = id;
}

int personne::id()
{
    return this->idPersonne;
}

void personne::setCodeAllocine(int code) // != id : code Allocine
{
    this->codeAllocinePersonne = code;
}

int personne::codeAllocine()
{
    return this->codeAllocinePersonne;
}

void personne::setNom(QString nom)
{
    this->nomPersonne = nom;
}

QString personne::nom()
{
    return this->nomPersonne;
}

void personne::setBiographie(QString biographie)
{
    this->biographiePersonne = biographie;
}

QString personne::biographie()
{
    return this->biographiePersonne;
}

void personne::setDateNaissance(QString date)
{
    this->dateNaissancePersonne = date;
}

QString personne::dateNaissance()
{
    return this->dateNaissancePersonne;
}

void personne::setLieuNaissance(QString lieu)
{
    this->lieuNaissancePersonne = lieu;
}

QString personne::lieuNaissance()
{
    return this->lieuNaissancePersonne;
}

void personne::setPhoto(QPixmap photo)
{
    this->photoPersonne = photo;
}

QPixmap personne::photo()
{
    return this->photoPersonne;
}

void personne::setCheminPhoto(QString cheminPhoto)
{
    this->cheminPhotoPersonne = cheminPhoto;
}

QString personne::cheminPhoto()
{
    return this->cheminPhotoPersonne;
}

void personne::setSexe(int sexe)
{
    this->sexePersonne = sexe;
}

int personne::sexe()
{
    return this->sexePersonne;
}

void personne::setListeNationalite(QList<nationalite> listeNat)
{
    this->listeNationalitePersonne = listeNat;
}

QList<nationalite> personne::listeNationalite()
{
    return this->listeNationalitePersonne;
}
